/*
	Radio.java
	Autor: Jennifer Pamela Valdez Cabrera
	Carne: 10189
	Fecha de entrega: 14 de Julio de 2011
	Descripcion: Es la simulacion de un radio de carro que se puede encender/apagar; adelantar/atrasar la emisora; guardar y llamar botones de memoria.
*/

// para que la emisora en FM aparezca solamente con 1 decimal
import java.text.DecimalFormat;

public class Radio implements NuestraInterfaz{

	//atributos
	private boolean on;
	private boolean fm;
	private double emisora;
	private double memoria[][];
	
	//variables
	private int columna;
	private DecimalFormat decimal = new DecimalFormat("0.#");
	
	//Constructor - inicializa objeto, el cual estara apagado, al encenderlo estara en FM en la 87.9
	//no devuelve ningun valor
	//no posee parametros
	public Radio(){
		on = false;
		fm = true;
		emisora = 87.9;
		memoria = new double [2][12];
	}

    //power: enciende o apaga la radio
	//no posee parametros
	//devuelve true si esta encendido y false si esta apagado
	public boolean power(){
		on = !on;
		return on;
	}
	
	//cambio: cambia de AM a FM y viceversa
	//no posee parametros
	//devuelve true si esta en FM y false si esta en AM
	public boolean cambio(){
		if (on){
			fm = !fm;
			emisora = fm ? 87.9 : 530;
			System.out.println("\n Usted ha cambiado la frecuencia \n");
		}
		return fm;
	}
	
	//fw: adelanta la emisora (10 en AM y 0.2 en FM)
	//no posee parametros y no devuelve ningun valor
	public void fw(){
		if (on){
			if (fm)
				if (emisora == 107.9)
					emisora = 87.9;
				else
					emisora += 0.2;
			else
				if (emisora == 1610)
					emisora = 530;
				else
					emisora += 10;
			System.out.println("\n Usted ha adelantado la emisora \n");
		}
	}
	
	//bw: atrasa la emisora (10 en AM y 0.2 en FM)
	//no posee parametros y no devuelve ningun valor
	public void bw(){
		if (on){
			if (fm)
				if (emisora == 87.9)
					emisora = 107.9;
				else
					emisora -= 0.2;
			else
				if (emisora == 530)
					emisora = 1610;
				else
					emisora -= 10;
			System.out.println("\n Usted ha atrasado la emisora \n");
		}
	}
	
	//store: guarda en un boton de memoria la emisora actual(son 12 memorias para cada frecuencia)
	//de parametro recibe un entero el cual indica en que boton se guardara la emisora actual; solo acepta numero de 0-11
	//no devuelve ningun valor
	public void store(int boton){
		if (on){
			columna = fm ? 0 : 1;
			memoria[columna][boton-1] = emisora;
			String aviso;
		    aviso = "\n Usted ha guardado en el boton de memoria No. " + boton + " la emisora ";
			aviso += fm ? decimal.format(emisora) + "\n" : (int)emisora + "\n";
			System.out.println(aviso);
		}
	}
	
	//select: sintoniza la emisora que se encuentra guardada en el boton seleccionado segun sea AM o FM
	//de parametro recibe un entero el cual indica que boton se quiere llamar
	//no devuelve ningun valor
	public void select(int boton){
		if (on){
			columna = fm ? 0 : 1;
			if (memoria[columna][boton-1] == 0)
				System.out.println("\n En este boton de memoria no se ha guardado ningun dato anteriormente! \n");
			else{
				emisora = memoria[columna][boton-1];
				String aviso;
				aviso = "\n Usted ha sintonizado el boton de memoria No. " + boton + " el cual contenia la emisora ";
				aviso += fm ? decimal.format(emisora) + "\n" : (int)emisora + "\n";
				System.out.println(aviso);
			}
		}
	}
	
	//salir: se dispara para salir del programa
	//no devulve ningun valor, y no recibe parametros
	public void salir(){
	}
	
	//toString: describe el estado del objeto.
	//Devuelve un string que contiene la descripcion del estado del objeto. 
    //No recibe parametros.
    public String toString(){
        String descripcion;
	descripcion = "\n El estado del radio es:  \n";
        descripcion  += fm ? "  -Frecuancia: FM \n" : "  -Frecuancia: AM \n";
        descripcion  += fm ? "  -Emisora: " + decimal.format(emisora) + "\n" : "  -Emisora: " + (int)emisora + "\n";
        return descripcion;
    }

}